package com.zoweunion.mechanic.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zoweunion.mechanic.model.SmsSendRequest;
import com.zoweunion.mechanic.service.base.LockCarService;
import com.zoweunion.mechanic.util.constants.Constants;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Map;

//import net.sf.json.JSONObject;
public class SmsUtil {
    private static Logger logger = LoggerFactory.getLogger(SmsUtil.class);
    private static LockCarService lockCarService = SpringUtils.getBean(LockCarService.class);
	/**
	 * 发送验证码
	 * @param phonenum 手机号
	 * @return
	 */
	public static String sendCodeSms(String phonenum,String Url,String account,String password,String mobile_code) {
		HttpClient client = new HttpClient();
		PostMethod method = new PostMethod(Url);

		client.getParams().setContentCharset("UTF-8");
		method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");

		//int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);

		String content = new String("您的验证码是：" + mobile_code + "。请不要把验证码泄露给其他人。");

		NameValuePair[] data = { // 提交短信
				new NameValuePair("account", account), new NameValuePair("password", password), // 查看密码请登录用户中心->验证码、通知短信->帐户及签名设置->APIKEY
				// new NameValuePair("password",
				// util.StringUtil.MD5Encode("密码")),
				new NameValuePair("phonenum", phonenum), new NameValuePair("content", content), };
		method.setRequestBody(data);

		try {
			client.executeMethod(method);

			String SubmitResult = method.getResponseBodyAsString();

			// System.out.println(SubmitResult);

			Document doc = DocumentHelper.parseText(SubmitResult);
			Element root = doc.getRootElement();

			String code = root.elementText("code");
			String msg = root.elementText("msg");
			String smsid = root.elementText("smsid");

			if ("2".equals(code)) {
				JSONObject json = new JSONObject();
				json.put("code", code);
				json.put("mobile_code", mobile_code);
				return json.toString();
			}

		} catch (HttpException e) {
			System.out.println("请检查输入的URL!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("发生网络异常!");
			e.printStackTrace();
		} catch (DocumentException e) {
			System.out.println("返回解析异常!");
			e.printStackTrace();
		} finally {
			// 释放链接
			method.releaseConnection();
			// 关闭HttpClient实例
			if (client != null) {
				((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();
				client = null;
			}
		}
		return "";

	}

	public static String sendSecurityCode(String phoneNum, String securityCode){
	    String content = "重要提醒，您的车(%s-%s-%s)的解锁码是：" + securityCode + "，如有疑问请联系工作人员";
	    return SmsUtil.sendSms(phoneNum, content);
    }

    // 机型- 品牌 - 型号
//	即将进入锁车流程，1分钟后扭矩50%，4分钟后扭矩40%，5分钟后即将锁定，如有疑问请联系工作人员
    public static final String warningLockCarImmediately = "重要提醒，您的车(%s-%s-%s)即将进入锁车流程，%s分钟后扭矩50%%，%s分钟后扭矩30%%，%s分钟后即将锁定，如有疑问请联系工作人员";
    public static final String warningLockCarImmediatelyPush = "重要提醒，您的车(%s-%s-%s)即将进入锁车流程，%s分钟后扭矩50%%，%s分钟后扭矩30%%，%s分钟后即将锁定，如有疑问请联系工作人员";
    public static final String warningCancelLockCar = "重要提醒，您的车辆：%s(%s-%s-%s)锁已被取消，如有疑问请联系工作人员";
    public static final String warningCancelLockCarPush = "重要提醒，您的车(%s-%s-%s)锁已被取消，如有疑问请联系工作人员";
    public static final String warningUnlockCode = "重要提醒，您的车(%s-%s-%s)的解锁码是：%s，如有疑问请联系工作人员";;
	public static final String warningRelaylLockCarImmediately = "重要提醒，您的车辆: %s(%s-%s-%s)即将被锁，如有疑问请联系工作人员";
	public static final String warningRelaylLockCarDelay= "重要提醒，您的车辆：%s(%s-%s-%s)将在%s时被锁，如有疑问请联系工作人员";
	public static String waringTemperatureFive = "车辆(%s-%s-%s)今日出现(%s)次水温过高, 请及时处理，以免影响正常工作";
	public static String waringTemperatureTwenty = "车辆(%s-%s-%s)发动机水温持续高温预警, 请及时查看发动机水温情况,以免影响正常工作";
	public static String waringTemperatureFivee = "车辆(%s)今日出现%s次水温过高, 请及时处理，以免影响正常工作";
	public static String waringtemperaturetwentye = "车辆(%s)发动机水温持续高温预警, 请及时查看发动机水温情况,以免影响正常工作";
	public static String couponpush = "叮~您有(%s)元现金券,工程机械操作证培训、保险办理使用!马上去[机修狮]APP使用!";
	public static String couponpushgive = "叮~您的好友送您(%s)元现金到账,工程机械操作证培训、保险办理使用,查看详情";
	public static String couponpushgivesend = "您的好友手机号码%s****%s送你%s元现金券，工程机械操作证培训、保险等办理使用！马上去【机修狮】APP使用！";
	public static String caannual = "车辆(%s)年检将在30天到期,请及时处理";
	public static String couponinv = "【机修狮】您有一张%s元工程机械操作证培训、保险办理的现金券将于%s天后到期，赶紧去【机修狮】APP使用吧！";

	public static String oilWaringTemperatureTwoMiu = "车辆(%s-%s-%s)今日出现%s次机油温度过高, 请及时处理，以免影响正常工作";
	public static String oilWaringTemperatureTwoMius = "车辆(%s)今日出现%s次机油温度过高, 请及时处理，以免影响正常工作";

	public static String oilWaringPressureTwoMinu = "车辆(%s-%s-%s)今日出现%s次机油压力过高, 请及时处理，以免影响正常工作";
	public static String oilWaringPressureTwoMinus= "车辆(%s)今日出现%s次机油压力过高, 请及时处理，以免影响正常工作";

	public static String highHdlOilWaringTemperatureFive = "车辆(%s-%s-%s)今日出现%s次液压油温度过高, 请及时处理，以免影响正常工作";
	public static String highHdlOilWaringTemperatureFives = "车辆(%s)今日出现%s次液压油温度过高, 请及时处理，以免影响正常工作";

	public static String lowHdlOilWaringTemperatureTen = "车辆(%s-%s-%s)今日出现%s次液压油温度过低, 请及时处理，以免影响正常工作";
	public static String lowHdlOilWaringTemperatureTens = "车辆(%s)今日出现%s次液压油温度过低, 请及时处理，以免影响正常工作";

	public static String highIdleTimeThirty = "车辆(%s-%s-%s)今日出现%s次连续怠速时间过长, 请及时处理，以免影响正常工作";
	public static String highIdleTimeThirtys = "车辆(%s)今日出现%s次连续怠速时间过长, 请及时处理，以免影响正常工作";

	public static String lightSenceWarning = "【%s】下的车辆(%s-%s-%s)的定位设备已被拆除, 请及时处理";
	public static String lightSenceWarnings = "【%s】下的车辆(%s)的定位设备已被拆除, 请及时处理";

	public static String serviceReminderOneHundred = "车辆(%s-%s-%s)已达到%s工时需要保养，请点击此条消息提交一键保养，使车辆维持在最佳工作运行状态";
	public static String serviceReminderOneHundreds = "车辆(%s)已达到%s工时需要保养，请点击此条消息提交一键保养，使车辆维持在最佳工作运行状态";

	public static String modelComparisonWarning = "%s-%s对比了%s款机型(%s),请及时联系";
	public static String newOroldMachineBrowseWarning = "%s-%s浏览询价了型号(%s),请及时联系";

	public static final String WarningLimitSpeed = "重要提醒：您的车即将被限速，请注意行车安全，如有疑问请联系工作人员";
    public static final String WarningLockCar = "重要提醒：您的车辆(%s-%s-%s)即将被锁，请注意行车安全，如有疑问请联系工作人员";
	public static final String WarningLockCarToServer = "重要提醒：您旗下的车辆:%s(%s-%s-%s)即将被锁，请注意行车安全，如有疑问请联系工作人员";
	public static final String WarningLockCarToJrpt = "重要提醒：车辆:%s(%s-%s-%s)即将被锁";

    public static final String WarningUnlockCar = "重要提醒：您的车辆(%s-%s-%s)即将被解锁，请放心驾驶";
	public static final String WarningUnlockCarToServer = "重要提醒：您旗下的车辆:%s(%s-%s-%s)即将被解锁，请放心驾驶";
	public static final String WarningUnlockCarToJrpt = "重要提醒：车辆:%s(%s-%s-%s)即将被解锁";

	public static final String WarningRemindRepaymentByDay = "重要提醒：您的车辆【%s】(%s-%s-%s)还有%s天将到账期还款日，请及时还款，以免给您带来不便！";

	public static String bluetoothUnLock = "(%s)的解锁密码是：(%s)，切勿泄露或转发他人,验证码当天有效";

	public static String AppPromotionActivityTraffic1Successful = "好友已为您助力成功，恭喜您获得%s全国流量，邀请更多好友助力，获得更多流量。实际到账时间以运营商短信通知为准。"; // APP推广活动1成功获取流量后的短信提醒内容

	public static String UNLOCK_APPLICATION = "因逾期已锁车设备%s-%s-%s(%s)现申请逾期解锁，请及时审核，感谢您的支持！";

	/**
	 * 发送短信
	 * @param phoneNum
	 * @param content
	 * @return
	 */
	public static String sendSms(String phoneNum, String content) {
        Map<String, Object> smsMap = lockCarService.getSmsSendTotalByPhone(phoneNum);
        if (smsMap == null) {
            lockCarService.initSendRecordNumber(phoneNum);
        } else {
            lockCarService.updateSendTotalByPhone(phoneNum);
            int sendTotal = Integer.valueOf(smsMap.get("sendTotal").toString());
            String type = smsMap.get("type").toString();
            if ("1".equals(type)) {
                if (sendTotal > 50) {
                    logger.error("短信发送失败，原因：达到今日上限次数");
                    return "达到今日上限次数";
                }
            }
        }
		SmsSendRequest smsSingleRequest = new SmsSendRequest(Constants.SMS_UID, Constants.SMS_KEY, content, phoneNum);
		String requestJson = JSON.toJSONString(smsSingleRequest);
		String result = SendMsg.sendSmsByPost(requestJson);
		Map<String, Object> resultMap = JSONObject.parseObject(result, Map.class);
		if (!resultMap.get("code").equals("0")) {
            logger.error("短信发送失败，原因：" + resultMap.get("errorMsg").toString());
			return resultMap.get("errorMsg").toString();
		}
		return "";
	}
}
